"""
python中7种可调用的对象

1.用户自定义的函数
    使用def语句或lambda表达式创建

2.内置函数
    比如len(),sum(),abs(),id()...

3.内置方法
    对象.方法名(),比如dict.get(),dict.keys(),list.pop()
4.方法

在类的定义体中定义的函数
5. 类

调用类时, 会首先运行类的__new__()方法创建一个实例, 然后运行__int__()方法来初始化这个实例, 最后把实例返回给调用方.

因为python没有new运算符, 所以调用类, 相当于调用函数.

6.类的实例  要求重写了call方法

7.生成器函数

使用 yield 关键字的函数或方法。调用生成器函数返回的是生成器对象。

"""


# var = 'sss'


class var:

    def __call__(self, *args, **kwargs):
        print('-----call-----')

    pass


# def var(a):
#     print(a)
#     pass

a = var()

# print(callable(dict.get))
print(callable(a))
a()


def getg():
    for i in range(10):
        yield i


g = getg
print(type(g))
print(callable(g))

res = g()
print(type(res))  # <class 'generator'>
print(callable(res))
